﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.Services;
using System.Text;

namespace  RzCorportativo.Views.Consulta
{
    public partial class Consultas : BasePage
    {
        private object DataSource
        {
            get { return this.Session["$Consulta$DataSource"]; }
            set { this.Session["$Consulta$DataSource"] = value; }
        }

        protected RzCorportativo.Lib.Consulta GetItem(object item)
        {
            if (!(item is RzCorportativo.Lib.Consulta))
                return new RzCorportativo.Lib.Consulta();
            return item as RzCorportativo.Lib.Consulta;
        }

        public HtmlString GetHtml(object item)
        {
            var consulta = this.GetItem(item);
            HtmlString html = null;
            string classe = string.Empty;
            consulta.DateConsulta = consulta.DateConsulta.Add(consulta.HoraEntrada);
            if (consulta.Atendida || consulta.DateConsulta < DateTime.Now)
            {
                classe = consulta.Atendida ? "btn-success" : "btn-danger";
            }
            StringBuilder menu = new StringBuilder();
            menu.Append("<div class=\"btn-group\">");
            menu.Append("<button class=\"btn " + classe + "\">Gerenciar</button>");
            menu.Append("<button class=\"btn dropdown-toggle\" data-toggle=\"dropdown\"><span class=\"caret\"></span></button>");
            menu.Append("<ul class=\"dropdown-menu\">");
            if (!consulta.Avaliado && consulta.DateConsulta >= DateTime.Now)
                menu.Append("<li><a href=\"" + base.ResolveUrl("~/Views/Cadastros/Triagem.aspx?") + "consultaId=" + consulta.ConsultaId.ToString() + "\">Triagem</a></li>");
            else
                menu.Append("<span>" + (consulta.Atendida ? "A" : "Não a") + "tendida" + "</span>");
            menu.Append("<li><a href=" + base.ResolveUrl("~/Views/Cadastros/Consulta.aspx?" ) + "consultaId=" + consulta.ConsultaId.ToString() + ">Selecionar</a></li>");
            menu.Append("</ul></div>");
            html = new HtmlString(menu.ToString());
            return html;
        }

        public HtmlString GetHtmlAtendido(object item)
        {
            var consulta = this.GetItem(item);
            HtmlString html = null;
            if (consulta.Atendida && consulta.Avaliado)
                html = new HtmlString("<span>Atendida</span>");
            else
            {
                if (consulta.Avaliado)
                {
                    html = new HtmlString("<span>Não atendida</span>");
                }
                else if (consulta.DateConsulta < DateTime.Now)
                {
                    html = new HtmlString("<span>Não atendida</span>");
                }
                else
                {
                    html = new HtmlString("<a id='lnkResolve" + consulta.ConsultaId.ToString() + "' href='javascript:FinalizarAtendimento(\"" + consulta.ConsultaId + "\", this)'>Finalizar Atendimento</a>");
                }
            }
            return html;
        }

        protected void Page_Load(object sender, EventArgs e)
        {
            this.ListaConsulta.SetSystemPageSize();
            if (this.IsPostBack)
                return;
            if ("cs".Equals(this.Request.QueryString["op"]))
            {
                Alert alerta = new Alert("erroGeral", this);
                alerta.AlertType = AlertType.Success;
                alerta.Add("consultaAtualizada", "Consulta atualizada com sucesso");
                alerta.Show();
            }
            var itens = RzCorportativo.Lib.Consulta.Listar(new RzCorportativo.Lib.Consulta());
            this.DataSource = itens;
            this.ListaConsulta.DataSource = itens;
            this.ListaConsulta.DataBind();
            var especialidades = RzCorportativo.Lib.Especialidade.Listar(new RzCorportativo.Lib.Especialidade());
            especialidades.Insert(0, new RzCorportativo.Lib.Especialidade() { Descricao = "Especialidade" });
            this.Especialidade.DataSource = especialidades;
            this.Especialidade.DataValueField = "EspecialidadeId";
            this.Especialidade.DataTextField = "Descricao";
            this.Especialidade.DataBind();
        }

        [WebMethod]
        public static string FinalizarConsulta(int consultaId, bool atendida)
        {
            if (consultaId == 0)
                return "!Código inválido";
            try
            {
                var item = RzCorportativo.Lib.Consulta.CreateInstance(consultaId);
                item.Atendida = atendida;
                item.Avaliado = true;
                if (item.Salvar())
                    return "*Item salvo com sucesso";
            }
            catch (Exception ex)
            {
                return "!Exception ao salvar o item: \\n" + ex.Message.Replace("\\", "\\\\");
            }
            return string.Empty;
        }

        protected void buscar_Click(object sender, EventArgs e)
        {
            RzCorportativo.Lib.Consulta consulta = new RzCorportativo.Lib.Consulta();
            if (this.Nome.Text.Length > 0 || this.CPF.Text.Length > 0)
            {
                var pessoas = RzCorportativo.Lib.Usuario.Listar(new RzCorportativo.Lib.Usuario()
                {
                    Cpf = EFramework.Web.Configuration.MaskConfiguration.RemoveMask(this.CPF.Text, "cpfKeyDel"),
                    Nome = this.Nome.Text
                });
                var pessoa = pessoas.FirstOrDefault();
                if (pessoa != null)
                {
                    consulta.PacienteId = pessoa.UsuarioId;
                }
            }
            if (this.NomeMedico.Text.Length > 0)
            {
                var medicos = RzCorportativo.Lib.Medico.Listar(new RzCorportativo.Lib.Medico()
                {
                    Pessoa = new RzCorportativo.Lib.Usuario()
                    {
                        Nome = this.NomeMedico.Text
                    }
                });
                var medico = medicos.FirstOrDefault();
                if (medico != null)
                {
                    consulta.MedicoId = medico.MedicoId;
                }
            }
            if (this.txtHrI.Text.Length > 0)
                consulta.HoraEntrada = EFramework.Web.TypeExtension.DateTimeExtension.Parse("01/01/0001 " + this.txtHrI.Text, DateTime.MinValue).TimeOfDay;
            if (this.txtHrS.Text.Length > 0)
                consulta.HoraSaida = EFramework.Web.TypeExtension.DateTimeExtension.Parse("01/01/0001 " + this.txtHrS.Text, DateTime.MinValue).TimeOfDay;
            if (!"0".Equals(this.Status.SelectedValue))
            {
                bool status = "1".Equals(this.Status.SelectedValue);
                consulta.Atendida = status;
            }
            consulta.EspecialidadeId = EFramework.Web.TypeExtension.ShortExtension.Parse(this.Especialidade.SelectedValue, 0);
            consulta.DateConsulta = EFramework.Web.TypeExtension.DateTimeExtension.Parse(this.Data.Text, DateTime.MinValue);
            var consultas = RzCorportativo.Lib.Consulta.Listar(consulta);
            this.ListaConsulta.DataSource = DataSource = consultas;
            this.ListaConsulta.DataBind();
        }

        protected void ListaConsulta_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {
            DataSource = DataSource == null ? RzCorportativo.Lib.Consulta.Listar(new RzCorportativo.Lib.Consulta()) : DataSource;
            this.ListaConsulta.SetPage(e.NewPageIndex, DataSource);
        }
    }
}